package com.legendframework.core.ioc;

import com.legendframework.core.AbstractLegendPlugin;
import com.legendframework.core.dao.Return;

import java.lang.annotation.Annotation;
import java.util.LinkedHashMap;

/**
 * Bean构建接口
 */
public interface BeansGenerate {

    /**
     * 获取这个类型的类注解
     * @return
     */
    Class<? extends Annotation> getAnnotation();

    /**
     * 获取这个Bean的名称
     * @param cls 字节码
     * @return
     */
    String getBeanName(Class<?> cls);

    /**
     * 将这个字节码中的所有涉及到需要构建的对象构建出来
     *
     * @param cls class
     * @return
     */
    LinkedHashMap<String,Object> generate(Class<?> cls , AbstractLegendPlugin plugin);

    /**
     * 构建Class并只获取这个Class的实例化
     *
     * 其中这个Class内部的@Bean都会被构建
     *
     * @param cls
     * @return
     */
    default Return<String,Object> generateByOne(Class<?> cls , AbstractLegendPlugin plugin){
        LinkedHashMap<String, Object> map = generate(cls , plugin);
        String beanName = map.keySet().iterator().next();
        return Return.build(beanName,map.get(beanName));
    }
}
